/**
 * date : 2010-11-02
 * author : Kim Jong-sun
 * comment : BoardService 인터페이스
 */

package wetogether.community.dao;

import java.sql.SQLException;
import java.util.ArrayList;

import wetogether.community.vo.AttachmentVO;
import wetogether.community.vo.BoardVO;
import wetogether.community.vo.CommentsVO;
import wetogether.community.vo.ContentListVO;

public interface BoardDAO {
	public void insertContent(BoardVO boardVO) throws SQLException;
	public void insertAttachment(AttachmentVO attachmentVO) throws SQLException;
	public void insertComments(CommentsVO commentsVO) throws SQLException;
	/*
	 * date : 2010-11-03
	 * Content, Comment, Attachment 별 sequence 생성 메서드 추가
	 */
	public int getSelectContentSeq() throws SQLException;
	public int getSelectCommentsSeq() throws SQLException;
	public int getSelectAttachmentSeq() throws SQLException;
	/*
	 * date : 2010-11-03
	 * 글이 DB에 입력된 시간을 얻기 위해서 해당 글의 sequence 값을 
	 * 인자값으로 넣어 줘야함
	 * 
	 * 날짜 얻어오는 메서드 각각 추가 2010-11-10
	 */
	public String getContentDate(int seq) throws SQLException;
	public String getCommentsDate(int seq) throws SQLException;
	public String getAttachmentDate(int seq) throws SQLException;
	
	public BoardVO getContent(int contentId) throws SQLException;
	public AttachmentVO getAttachment(int contentId) throws SQLException;
	/**
	 * 페이징 처리 때문에 새로 ContentListVO 생성해서 넣어줌.
	 * @param contentListVO
	 * @return
	 */
	public ArrayList<BoardVO> getContentList(ContentListVO contentListVO);
	public ArrayList<CommentsVO> getCommentsList(int contentId) throws SQLException;
	
	/**
	 * 2010-11-12
	 * 따로 메서드 만들 필요 없음!!
	 * 목록 뽑을 때 검색어가 없다면 전체 글 목록으로 보여주고, 검색어가 있다면 해당 검색어에 맞는 글 목록을 보여준다.
	 */
	/*public ArrayList<BoardVO> findContentByName(String name, int boardId, int locationId) throws SQLException;
	public ArrayList<BoardVO> findContentByTitle(String title, int boardId, int locationId) throws SQLException;*/
	
	public void updateContent(BoardVO boardVO) throws SQLException;
	public void updateHits(int contentId) throws SQLException;
	/**
	 * 첨부파일을 다운로드 할 때마다 download + 1 해 주기 위해서.
	 * @param fileId
	 */
	public void updateDownload(int fileId);
	public void deleteContent(int contentId) throws SQLException;
	public void deleteAttachment(int fileId) throws SQLException;
	public void deleteComments(int commentsId) throws SQLException;
	/*
	 * 추가 메서드 2010-11-09
	 * Board 테이블의 CommentsHits up, down
	 * 해당 게시물에 댓글이 추가될 때마다 올리기, 내리기
	 */
	public void updateCommentsHitsUp(int contentId) throws SQLException;
	public void updateCommentsHitsDown(int contentId) throws SQLException;
	/**
	 * 전체 글의 갯수를 알기 위해서.
	 */
	public int totalContent(ContentListVO contentListVO);
	
	/*
	 * date : 2010-11-06
	 * author : Shin In-soo
     * comment : Reply기능 구현을 위한 DAO method들
     * checkGroupPosition : 답글을 넣을 position을 체크 (-1 = 맨뒤(max)+1 / n = n번째 자리(기존의 것들은 +1)
     * findMaxGroupPosition : 답글을 맨뒤에 넣기 위해 max값 리턴
     * updatePositionNumber : n번째 들어가는 게시물을 위해 n이상의 게시물들은 한칸씩 밀림(position=positon+1) 
	 */
	public int checkGroupPosition(BoardVO boardVO);
	public int findMaxGroupPosition(BoardVO boardVO);
	public void updatePositionNumber(BoardVO boardVO);
}

